//
//  main.c
//  Scanf的运行原理
//
//  Created by ws on 2017/7/13.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
 scanf运行原理
 scanf在内存中有一块输入的缓存区的
 1.scanf如果发现输入缓存区没有数据,就会自动录入
 2.scanf发现输入缓存区有"\n",那么他就会去输入缓存区取值
 3.如果发现数据匹配,就会取走数据
 4.如果不是自己的匹配数据,就会自己回去不再往下寻找,直接返回默认的结果
*/
void test1(){
    int d;
    char c;
    int i;
    scanf("%d",&d);//当调用这一行时候,调用缓存区没有内容 就让你输入数据,当你在控制台输入10a20,缓存区就有数据10a20,此行代码会判别输入的格式是否匹配 然后拿走10 剩下a20
    scanf("%c",&c);//此行代码会判别输入的格式是否匹配 然后拿走a 剩下20
    scanf("%i",&i);//此行代码会判别输入的格式是否匹配 然后拿走20 缓存区没有内容
    printf("%d,%c,%i\n",d,c,i);
}
void test2(){
    int d;
    char c;
    int i;
    scanf("%d",&d);//当调用这一行时候,调用缓存区没有内容 就让你输入数据,当你在控制台输入"10 a 20",缓存区就有数据"10 a 20",此行代码会判别输入的格式是否匹配 然后拿走10 剩下" a 20"
    scanf("%c",&c);//此行代码会判别输入的格式是否匹配 然后拿走" " 剩下"a 20"
    scanf("%i",&i);//此行代码会判别输入的格式是否匹配,他要的是整型的数据,a不是整型,不匹配 就结束(退出)啦 他不会继续往下走(他输出的东西就是以前的定义的时候是什么东西就是什么东西)  缓存区依然依然有数据"a 20"
    printf("%d,%c,%i\n",d,c,i);
}
int main(int argc, const char * argv[]) {
    int d;
    int c;
    int i;
    scanf("%d",&d);//当调用这一行时候,调用缓存区没有内容 就让你输入数据,当你在控制台输入"10 a 20",缓存区就有数据"10 a 20",此行代码会判别输入的格式是否匹配 然后拿走10 剩下" a 20"
    scanf("%d",&c);//此行代码会判别输入的格式是否匹配 然后拿走" " 剩下"a 20"
    scanf("%i",&i);//此行代码会判别输入的格式是否匹配,他要的是整型的数据,a不是整型,不匹配 就结束(退出)啦 他不会继续往下走(他输出的东西就是以前的定义的时候是什么东西就是什么东西)  缓存区依然依然有数据"a 20"
    printf("%d,%d,%i\n",d,c,i);
    return 0;
}
